
#include "..\Modulos\Comandos\comandos.h"

int main(){
    string cadena;
    bool sintaxisOk,logicaOk;
    char salir;
    Comando comando;
    Formulas form;

    crearFormula(form,30);
    strcrear(cadena);
    printf("***************************************\n");
    printf("*        PRUEBA MODULO COMANDOS       *\n");
    printf("***************************************\n");
    printf("\n\n\n\n");
    printf("*        PRUEBA AUTOMATIZADA       *\n");
    printf("\n\n");

    printf("CADENA DE PRUEBA 1 -> ");
    strcopLiteral(cadena,"basic lala");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
    if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }




    printf("\n\n");
    printf("CADENA DE PRUEBA 2 -> ");
    strcopLiteral(cadena,"basic");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 3 -> ");
    strcopLiteral(cadena," basic a bass");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 4 -> ");
    strcopLiteral(cadena,"basic lala");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 6 -> ");
    strcopLiteral(cadena,"notbasic e2a");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 8 -> ");
    strcopLiteral(cadena,"notbasic lala");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 10 -> ");
    strcopLiteral(cadena,"notbasic ~p");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 12 -> ");
    strcopLiteral(cadena,"notbasic ~e21 prue");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 14 -> ");
    strcopLiteral(cadena,"notbasic e10 \/ e12 saa");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 16 -> ");
    strcopLiteral(cadena,"print e14");
    print(cadena);
      printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 17 -> ");
    strcopLiteral(cadena,"atoms e15 lala");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 18 -> ");
    strcopLiteral(cadena,"eval e25");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 19 -> ");
    strcopLiteral(cadena,"save e13");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }
    printf("\n\nCADENA DE PRUEBA 20 -> ");
    strcopLiteral(cadena,"save e19 archivo.txt");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n");
    printf("CADENA DE PRUEBA 21 -> ");
    strcopLiteral(cadena,"load e19 archivo.txt");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }
    printf("\n\nCADENA DE PRUEBA 22 -> ");
    strcopLiteral(cadena,"load archivo.txt");
    print(cadena);
    printf("\nVALID. SINTAXIS -> ");
    validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }


    printf("\n\n\n\n");
    printf("*        PRUEBA MANUAL       *\n");
    printf("\n\n");
    do{
        fflush(stdin);
        printf("\n\n");
        printf("Ingrese cadena: ");
        scan(cadena);
        printf("\nVALID. SINTAXIS -> ");
        validaSintaxisComando(cadena,sintaxisOk);
        validaSintaxisComando(cadena,sintaxisOk);
        if (sintaxisOk){
        printf("OK!!");
        printf("\nVALIDACION LOGICA -> ");
        comando = cargaComando(cadena);
        validaLogicaComando(comando,form,logicaOk);
        if (logicaOk){
            printf("OK!!");
            printf("\nRESULTADO -> ");
            ejecutarComando(comando,form);
        }
    }

        printf("\n\n\n\nDesea continuar probando comandos? Presione 's' para salir: ");
        scanf("%c",&salir);
        fflush(stdin);
    }while(salir!='s');
    printf("\n\n\n\n");

    strdestruir(cadena);

    return 0;
}
